package com.doyens.service.Impl;

import com.alibaba.druid.util.StringUtils;
import com.doyens.mapper.ApplicantMapper;
import com.doyens.pojo.Applicant;
import com.doyens.service.ApplicantService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ApplicantServiceImpl implements ApplicantService {
    @Autowired
    private ApplicantMapper mapper;

    /**
     * 分页查询列表展示
     * @param page
     * @param pageSize
     * @return
     */
    @Override
    public PageInfo<Applicant> list(Integer page,Integer pageSize) {
        //调用pageHelper分页工具类，带入参数调用方法
        PageHelper.startPage(page,pageSize);
        //返回携带有所有数据的PageInfo类对象
        return new PageInfo<Applicant>(mapper.list());
    }

    @Override
    public List<Applicant> findStatus() {
        return mapper.findStatus();
    }

    @Override
    public List<Applicant> findEducation() {
        return mapper.findEducation();
    }

    @Override
    public Applicant findById(String id) {
        return mapper.findById(id);
    }

    /**
     * 删除要先删除中间表数据
     * 再删除主表数据
     * @param id
     */
    @Override
    public Integer del(Integer id) {
        mapper.delAl(id);
        return mapper.del(id);
    }

    /**
     * 修改信息后进行储存数据要注意三点
     * 需要中间表的两个id值
     * 先存储中间表，在存储主表
     * 注意修改中间表数据一定要先删除中间表两者对应关系，在进行添加
     * ajax存储结束是否需要返回值？
     */
    @Override
    public Integer saveEdit(Applicant applicant, Integer[] interviewerIds) {
//        先删除之前的对应关系，再进行关系数据添加
        mapper.delAl(applicant.getEid());
        //保存应聘者信息先保存中间表数据，在保存主表数据
        for (Integer interviewerId : interviewerIds) {
            //根据应聘者id和提交的面试官的id，存储中间表
            mapper.saveInterviewerName(applicant.getEid(),interviewerId);
        }
//        存储主表数据
        return mapper.save(applicant);
    }

    /**
     *多条件模糊查询
     * 判断参数是否为空
     * 再决定进入哪个查询方法
     */
    @Override
    public List<Applicant> findByCondition(String ename, Integer status) {
        if (!StringUtils.isEmpty(ename) && status == -1){
            return mapper.findByEname(ename);
        }else if (StringUtils.isEmpty(ename) && status != -1){
            return mapper.findByStatus(status);
        }
        return mapper.findByCondition(ename,status);
    }
}
